﻿using ConfExpert.Forms.Base;
using ConfExpert.Forms.Destex.Satis;

using DevExpress.Utils;
using DevExpress.XtraBars;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraReports.UI;
using DevTeam;

using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;

namespace ConfExpert.Forms.Destex
{
    public partial class SiparisYonetimi : XForm
    {
        public SiparisYonetimi()
        {
            InitializeComponent();
        }

        int SiparisId = -1;
        public SiparisYonetimi(int siparisId)
        {
            InitializeComponent();
            this.SiparisId = siparisId;
            this.Text = "Sipariş - #" + siparisId;
        }
        private void SiparisYonetimi_Load(object sender, EventArgs e)
        {
            EnableBarcodeType(0);
            BarcodeRead += TopKesim_BarcodeRead;

            gvSiparis.Init("DX_GetSiparisler");
            gvSiparis.AddDetailGrid(gvTop, "ProductId");

            gvSiparis.MakeColumnInvisible("DtxPOLinesId", "ProductId");
            gvSiparis.SetCaptions("DtxPOId:Satış No.", "SiparisTarihi:Satış Tarihi", "SatisYapan:Satıcı", "Musteri:Müşteri", "FiyatTl:Fiyat ₺", "QtySiparis:Sipariş mt.", "ToplamTutarTl:Toplam ₺");
            gvSiparis.AddColumn("Fark", typeof(double), "QtySiparis - KesilenQty");
            gvSiparis.YanYanaGetir("Fark:ToplamTutarTl");
            gvSiparis.FormatAsNumber(2, "QtySiparis", "Fiyat", "FiyatTl", "ToplamTutarTl", "KesilenQty", "Fark");

            gvSiparis.RowCellStyle += gvKesim_RowCellStyle;
            gvSiparis.MakeReadOnly();

            GridMenu gm = GridManager.GetManager(gvSiparis).GridMenu;
            gm.AddMenu("Kumaş Kesim Talebi", PrintKumasKesimTalebi);
            gm.AddMenu("Seçili satırlardan fatura oluştur", FaturaOlustur);
            gm.AddMenu("İptal", SiparisIptal);

            gvTop.FormatAsNumber(1, "Qty");
            gvTop.CellValueChanged += gvTop_CellValueChanged;
            gvSiparis.MakeReadOnly();

            gm = GridManager.GetManager(gvTop).GridMenu;



            if (ytk(175))
            {
                gm.AddMenu("Bu topu kes", BuTopuKes);
                gm.AddMenu("Bu topu kullan", BuTopuKullan);
            }

            if (SiparisId > -1)
                gvSiparis.ActiveFilterString = "DtxPOId = " + SiparisId;

            gvSiparis.BestFitColumns();
            gvTop.BestFitColumns();
        }
        private void FaturaOlustur(object sender, EventArgs e)
        {
            string idxs = "";

            int[] ids = gvSiparis.GetSelectedRows();
            if (ids.Length == 0 && gvSiparis.FocusedRowHandle > -1)
                ids = new int[] { gvSiparis.FocusedRowHandle };

            string musteri = "";
            bool first = true;
            string currency = "";

            foreach (int rowHandle in ids)
            {
                System.Data.DataRow dr = gvSiparis.GetDataRow(rowHandle);
                string drCurrency = dr["CurrencyId"].ToStr();

                if (drCurrency == "")
                {
                    ShowErrorMessage("Yaptığınız seçimde parabirimi belli olmalıdır !");
                    return;
                }


                if (first)
                {
                    musteri = dr["Musteri"].ToStr();
                    currency = drCurrency;
                    first = false;
                }
                else if (musteri != dr["Musteri"].ToStr())
                {
                    ShowErrorMessage("Yaptığınız seçimde sadece tek müşteri olmalıdır !");
                    return;
                }

                if (dr["DX_FaturaId"].ToInt() < 1)
                    idxs += dr["DtxPOLinesId"].ToString() + ",";
            }

            idxs = idxs.RemoveIfEndsWith(",");

            if (idxs == "")
                ShowErrorMessage("Yaptığınız seçimde fatura oluşturulabilecek satırlar yok.");
            else
            {
                int faturaId = ExecuteScalar("DX_InsFatura", idxs).ToInt();
                btnGuncelle.PerformClick();
                ConfExpert.Utility.AppSession.MainForm.ShowMdiChildForm(typeof(Faturalar), faturaId);
            }
        }
        void gvTop_CellValueChanged(object sender, CellValueChangedEventArgs e)
        {
            gvTop.EndEditing();
            if (e.RowHandle > -1)
            {
                if (e.Column.FieldName == "Barkod")
                {
                    DataTable dt = gvTop.DataTable();
                    string Barkod = gvTop.GetRowCellValue(e.RowHandle, "RollId").ToStr();

                    if (Barkod.Length < 6)
                        return;

                    Go(Barkod);
                }
            }
        }
        private void PrintKumasKesimTalebi(object sender, EventArgs e)
        {
            string dtxPOLinesId = gvSiparis.GetSelectedValues("DtxPOLinesId");
            DataSet ds = ExecuteDataSet("DX_GetKumasKesimRaporu", dtxPOLinesId);

            Rapor.Destex.KumasKesimTalebi kkt = new Rapor.Destex.KumasKesimTalebi(ds);
            kkt.ShowPreview();
        }
        private void BuTopuKes(object sender, EventArgs e)
        {
            Go(gvTop.GetFocusedRowCellValue("RollId").ToStr());
        }
        private void BuTopuKullan(object sender, EventArgs e)
        {
            DataRow drTop = gvTop.GetFocusedDataRow();
            DataRow drArtikel = gvSiparis.GetFocusedDataRow();
            if (drTop["Qty"].ToDecimal() == 0)
                XtraMessageBox.Show("Bu top daha önceden kullanılmış !");
            else
            {
                if (drTop["Qty"].ToDecimal() > drArtikel["QtySiparis"].ToDecimal())
                    if (XtraMessageBox.Show("Topun metrajı(" + drTop["Qty"].ToDecimal() + " mt) ihtiyacın(" + drArtikel["QtySiparis"].ToDecimal() + " mt) üzerinde. Yine de devam etmek istiyor musunuz ?", "Critical", MessageBoxButtons.YesNo) == DialogResult.No)
                        return;
                ExecuteNonQuery("DtxTopBol", drTop["RollId"], drTop["Qty"], drArtikel["DtxPOLinesId"], 0, DBNull.Value, WhoAmI, "Bu topu kullan (Topsuz Kesim)", drArtikel["ProductId"], drArtikel["QtySiparis"]);
                gvTop.SetFocusedRowCellValue("Qty", 0);
                XtraMessageBox.Show("Topun tamamı kullanıldı !");
                int DxtPOLinesId = drArtikel["DtxPOLinesId"].ToInt();
                btnGuncelle.PerformClick();
                int rowHandle = gvSiparis.LocateByValue("DtxPOLinesId", DxtPOLinesId);
                if (rowHandle != DevExpress.XtraGrid.GridControl.InvalidRowHandle)
                    gvSiparis.FocusedRowHandle = rowHandle;
            }
        }
        void TopKesim_BarcodeRead(int Type, int Barcode)
        {
            Go(Barcode.ToStr());
        }
        void Go(string Barkod)
        {
            DataRow drKesim = ((DataRowView)gvSiparis.GetFocusedRow()).Row;

            DataTable dtTop = Session.DataManager.ExecuteDataTableByQuery("Select * from V_Top where Qty > 0.1 and RollId =" + Barkod);
            if (dtTop.Rows.Count > 0)
            {
                int TopKumasId = dtTop.Rows[0]["ProductId"].ToInt();
                int KumasId = drKesim["ProductId"].ToInt();
                decimal TopMt = dtTop.Rows[0]["Qty"].ToDecimal();
                decimal Ihtiyac = drKesim["QtySiparis"].ToDecimal();

                if (KumasId != TopKumasId)
                {
                    XtraMessageBox.Show("Yanlış kumaş okuttunuz !");
                    return;
                }
                else
                {
                    if (Ihtiyac > TopMt)
                        if (XtraMessageBox.Show("Topun metrajı ihtiyacı karşılamıyor. Yine de devam etmek istiyor musunuz ?", "Critical", MessageBoxButtons.YesNo) == DialogResult.No)
                            return;

                    TopKesme tb = new TopKesme(drKesim, Barkod, TopMt);
                    if (tb.ShowDialog() == DialogResult.OK)
                    {
                        int DxtPOLinesId = drKesim["DtxPOLinesId"].ToInt();
                        btnGuncelle.PerformClick();
                        int rowHandle = gvSiparis.LocateByValue("DtxPOLinesId", DxtPOLinesId);
                        if (rowHandle != DevExpress.XtraGrid.GridControl.InvalidRowHandle)
                            gvSiparis.FocusedRowHandle = rowHandle;

                        Notify("İşlem tamamlandı.");
                    }
                }
            }
            else
            {
                XtraMessageBox.Show("Kumaş topu bulunamadı");
                return;
            }
        }
        void gvKesim_RowCellStyle(object sender, RowCellStyleEventArgs e)
        {
            if (e.RowHandle > -1)
            {
                if (e.Column.FieldName == "ToplamIhtiyacMt")
                {
                    e.Appearance.Font = new Font(AppearanceObject.DefaultFont, FontStyle.Bold);
                    e.Appearance.ForeColor = Color.Red;
                }
                else if (e.Column.FieldName == "ToplamStokMt")
                {
                    e.Appearance.Font = new Font(AppearanceObject.DefaultFont, FontStyle.Bold);
                }

                if (e.RowHandle == gvSiparis.FocusedRowHandle)
                {
                    e.Appearance.BackColor = Color.SkyBlue;
                }
            }
        }
        private void btnGuncelle_ItemClick(object sender, ItemClickEventArgs e)
        {
            gvSiparis.RefreshDataSource("DX_GetSiparisler");
        }

        void SiparisIptal(object sender, EventArgs e)
        {
            string POLinesIdler = gvSiparis.GetSelectedValues("DtxPOLinesId");

            int Hata = ExecuteScalar("UpdDtxPOLines", POLinesIdler).ToInt();

            if (Hata == 1)
                XtraMessageBox.Show("Seçtiğiniz Satırların Tamamı AÇIK Durumda Olmalıdır!","Uyarı");
            else if (Hata == 2)
                XtraMessageBox.Show("TAILORD Müşterisi İçin Bu İşlem Uygulanamaz!", "Uyarı");
            else
                gvSiparis.RefreshDataSource("DX_GetSiparisler");
        }
    }
}
